#!/bin/bash

# 一键安装Tailscale优化器脚本
# 适用于CentOS 7系统

# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[0;33m'
NC='\033[0m' # No Color

# 日志函数
log() {
    echo -e "${GREEN}[$(date '+%Y-%m-%d %H:%M:%S')] $1${NC}"
}

error() {
    echo -e "${RED}[$(date '+%Y-%m-%d %H:%M:%S')] 错误: $1${NC}" >&2
}

warn() {
    echo -e "${YELLOW}[$(date '+%Y-%m-%d %H:%M:%S')] 警告: $1${NC}"
}

# 检查是否为root用户
if [ "$(id -u)" != "0" ]; then
   error "此脚本需要root权限，请使用sudo或以root用户运行"
   exit 1
fi

# 检查操作系统版本
if [ -f /etc/centos-release ]; then
    OS_VERSION=$(cat /etc/centos-release | tr -dc '0-9.' | cut -d \. -f1)
    if [ "$OS_VERSION" != "7" ]; then
        warn "检测到CentOS版本为$OS_VERSION，此脚本设计用于CentOS 7，可能存在兼容性问题"
    fi
else
    warn "未检测到CentOS系统，此脚本设计用于CentOS 7，可能存在兼容性问题"
fi

# 安装必要的软件包
log "正在安装必要的软件包..."
if ! yum -y update; then
    warn "系统更新过程出现警告，但将继续安装"
fi

log "安装依赖项: libcgroup-tools bc jq util-linux psmisc curl wget unzip net-tools"
if ! yum install -y libcgroup-tools bc jq util-linux psmisc curl wget unzip net-tools; then
    error "依赖项安装失败，请检查上述错误并手动安装"
    error "必要的包: libcgroup-tools bc jq util-linux psmisc curl wget unzip net-tools"
    exit 1
fi

# 验证依赖项
for cmd in taskset renice ionice bc jq; do
    if ! command -v "$cmd" >/dev/null 2>&1; then
        error "命令 '$cmd' 未找到，请确保所有依赖项已正确安装"
        exit 1
    fi
done
log "所有依赖项检查通过"

# 创建必要的目录
log "正在创建必要的目录..."
mkdir -p /opt/tailscale_optimizer

# 下载优化器脚本
log "正在下载Tailscale优化器脚本..."
SCRIPT_URL="https://gitee.com/ShenxuGongzi/bbr2/raw/master/tailscale_optimizer.sh"
SCRIPT_PATH="/opt/tailscale_optimizer/tailscale_optimizer.sh"
TEMP_DOWNLOAD="/tmp/tailscale_optimizer_download"

# 使用curl下载到临时文件，然后移动到目标位置
if ! curl -L "$SCRIPT_URL" -o "$TEMP_DOWNLOAD"; then
    error "下载脚本失败！"
    exit 1
fi

# 移动到正确位置并重命名
mv "$TEMP_DOWNLOAD" "$SCRIPT_PATH"

# 设置脚本权限
chmod +x "$SCRIPT_PATH"
log "脚本已下载到 $SCRIPT_PATH"

# 创建系统服务
log "正在创建系统服务..."
cat > /etc/systemd/system/tailscale-optimizer.service << EOF
[Unit]
Description=Tailscale Performance Optimizer
After=network.target tailscaled.service

[Service]
Type=simple
ExecStart=/bin/bash $SCRIPT_PATH
Restart=always
RestartSec=30
StandardOutput=journal
StandardError=journal

[Install]
WantedBy=multi-user.target
EOF

# 重新加载systemd配置
systemctl daemon-reload

# 启用并启动服务
log "正在启用并启动服务..."
systemctl enable tailscale-optimizer.service
systemctl start tailscale-optimizer.service

# 检查服务状态
if systemctl is-active --quiet tailscale-optimizer.service; then
    log "Tailscale优化器服务已成功启动"
else
    error "Tailscale优化器服务启动失败，请检查日志：journalctl -u tailscale-optimizer.service"
fi

# 打印使用指南
log "================================================="
log "Tailscale优化器安装完成!"
log "服务名称: tailscale-optimizer.service"
log "脚本位置: $SCRIPT_PATH"
log "日志位置: /var/log/tailscale_optimizer.log"
log ""
log "常用命令:"
log "  启动服务: systemctl start tailscale-optimizer"
log "  停止服务: systemctl stop tailscale-optimizer"
log "  重启服务: systemctl restart tailscale-optimizer"
log "  查看状态: systemctl status tailscale-optimizer"
log "  查看日志: journalctl -u tailscale-optimizer -f"
log "  或者: tail -f /var/log/tailscale_optimizer.log"
log "================================================="